﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIMCFachadaNegocio;
using SIMCObjetoNegocio;

namespace SIMCPresenter
{
    public interface IModificarFiltrosView : IViewBase
    {
        event EventHandler<EventArgs> BuscarPerfilesAsociados;
        event EventHandler<EventArgs> ActualizarFiltro;
        event EventHandler<EventArgs> AsociarPerfiles;
    
        int FiltroSeleccionado { get;}

        List<Rol> SeleccionarPerfiles { set; }
        List<Rol> MostarPerfiles { set; }

        FiltroPortafolio MostrarFiltro { set; }
        FiltroPortafolio ObtenerFiltro { get; }

        List<string> PerfilesSeleccionados { get; }
    }

    public class ModificarFiltrosPresenter : PresenterBase
    {
        private IModificarFiltrosView mView;
        private FachadaPortafolio m_FachadaPortafolio;

        public ModificarFiltrosPresenter(IModificarFiltrosView view)       
            : base (view)
        {
           this.mView = view;
            m_FachadaPortafolio = new FachadaPortafolio();
            this.Initialize();
        }
      
        private void Initialize()
        {
            this.mView.BuscarPerfilesAsociados += new EventHandler<EventArgs>(mView_BuscarPerfilesAsociados);
            this.mView.ActualizarFiltro += new EventHandler<EventArgs>(mView_ActualizarFiltro);
            this.mView.AsociarPerfiles += new EventHandler<EventArgs>(mView_AsociarPerfiles);          
        }

        private void mView_BuscarPerfilesAsociados(object sender, EventArgs e)
        {
            try
            {
                FachadaSeguridad m_FachadaSeguridad = new FachadaSeguridad();

                List<Rol> Roles = m_FachadaPortafolio.BuscarPerfilesSinFiltros();

                Roles.AddRange(m_FachadaPortafolio.BuscarPerfilesAsociados(mView.FiltroSeleccionado));

                mView.MostarPerfiles = Roles;              

                mView.MostrarFiltro = m_FachadaPortafolio.BuscarFiltroPorId(mView.FiltroSeleccionado);

                mView.SeleccionarPerfiles = m_FachadaPortafolio.BuscarPerfilesAsociados(mView.FiltroSeleccionado); 
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                mView.MostrarMensaje(ex.Message, false);
            }
        }

        private void mView_ActualizarFiltro(object sender, EventArgs e)
        {
            try
            {
                FiltroPortafolio Filtro = mView.ObtenerFiltro;
               
                m_FachadaPortafolio.ActualizarFiltro(Filtro);

                mView.MostrarFiltro = Filtro;
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                mView.MostrarMensaje(ex.Message, false);
            }
        }

        private void mView_AsociarPerfiles(object sender, EventArgs e)
        {
            try
            {
                m_FachadaPortafolio.AsociarPerfiles(mView.FiltroSeleccionado, mView.PerfilesSeleccionados);

                mView.SeleccionarPerfiles = m_FachadaPortafolio.BuscarPerfilesAsociados(mView.FiltroSeleccionado);

                mView.MostrarMensaje("La asociación de perfiles se ha realizado con éxito", true);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                mView.MostrarMensaje(ex.Message, false);
            }
        }    
    }
}
